﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades.Sistema.Produccion;

namespace Mapping.Sistema.Produccion
{
    public static class MappingInsumo
    {
        public static List<Insumo> ConsultarInsumos()
        {
            try
            {
                SqlCommand cmdInsumos = new SqlCommand();
                cmdInsumos.CommandText = "sp_ConsultarInsumo";
                cmdInsumos.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdInsumos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                
                SqlDataReader drInsumos = cmdInsumos.ExecuteReader();

                List<Insumo> ColInsumos = new List<Insumo>();

                while (drInsumos.Read())
                {
                    Insumo oInsumo = new Insumo();
                    oInsumo.IdInsumo = Convert.ToInt32(drInsumos["Id_Insumo"]);
                    oInsumo.Descripcion = drInsumos["Descripcion"].ToString();
                    oInsumo.Nombre = drInsumos["Nombre"].ToString();
                    oInsumo.StockNecesario = Convert.ToInt32(drInsumos["StockNecesario"]);
                    oInsumo.UnidadDeMedida.IdUnidadMedida = Convert.ToInt32(drInsumos["Id_UnidadMedida"]);

                    oInsumo.UnidadDeMedida = Mapping.Sistema.Venta.MappingUnidad.ConsultarUnidadePorClave(oInsumo.UnidadDeMedida.IdUnidadMedida);

                    ColInsumos.Add(oInsumo);
                }

                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColInsumos;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        public static bool AgregarInsumo(Insumo oInsumo)
        {
            SqlCommand cmdInsumo = new SqlCommand();
            cmdInsumo.CommandText = "sp_AgregarInsumo";
            cmdInsumo.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdInsumo.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdInsumo.Parameters.Add("@Id_Insumo", System.Data.SqlDbType.Int).Value = oInsumo.IdInsumo;
            cmdInsumo.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oInsumo.Nombre;
            cmdInsumo.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 50).Value = oInsumo.Descripcion;
            cmdInsumo.Parameters.Add("@StockNecesario", System.Data.SqlDbType.Int).Value = 0;
            cmdInsumo.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oInsumo.UnidadDeMedida.IdUnidadMedida;
            cmdInsumo.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }

        public static int ModificarInsumo(Insumo oInsumo)
        {
            SqlCommand cmdInsumo = new SqlCommand();
            cmdInsumo.CommandText = "sp_ModificarInsumo";
            cmdInsumo.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdInsumo.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdInsumo.Parameters.Add("@Id_Insumo", System.Data.SqlDbType.Int).Value = oInsumo.IdInsumo;
            cmdInsumo.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oInsumo.Nombre;
            cmdInsumo.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 50).Value = oInsumo.Descripcion;
            cmdInsumo.Parameters.Add("@StockNecesario", System.Data.SqlDbType.Int).Value = oInsumo.StockNecesario;
            cmdInsumo.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oInsumo.UnidadDeMedida.IdUnidadMedida;
            int nro = Convert.ToInt32(cmdInsumo.ExecuteScalar());
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return nro;
        }

        public static bool EliminarInsumo(Insumo oInsumo)
        {
            SqlCommand cmdInsumo = new SqlCommand();
            cmdInsumo.CommandText = "sp_EliminarInsumo";
            cmdInsumo.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdInsumo.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdInsumo.Parameters.Add("@Id_Insumo", System.Data.SqlDbType.Int).Value = oInsumo.IdInsumo;
            cmdInsumo.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }

        public static Insumo ConsultarInsumoPorClave(int idinsumo)
        {
            try
            {
                SqlCommand cmdInsumos = new SqlCommand();
                cmdInsumos.CommandText = "sp_ConsultarInsumoPorClave";
                cmdInsumos.CommandType = System.Data.CommandType.StoredProcedure;
                cmdInsumos.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();

                cmdInsumos.Parameters.Add("@IdInsumo", System.Data.SqlDbType.Int).Value = idinsumo;
                SqlDataReader drInsumos = cmdInsumos.ExecuteReader();

                Insumo oInsumo = new Insumo();

                while (drInsumos.Read())
                {                    
                    oInsumo.IdInsumo = Convert.ToInt32(drInsumos["Id_Insumo"]);
                    oInsumo.Descripcion = drInsumos["Descripcion"].ToString();
                    oInsumo.Nombre = drInsumos["Nombre"].ToString();
                    oInsumo.StockNecesario = Convert.ToInt32(drInsumos["StockNecesario"]);
                    oInsumo.UnidadDeMedida.IdUnidadMedida = Convert.ToInt32(drInsumos["Id_UnidadMedida"]);

                    oInsumo.UnidadDeMedida = Mapping.Sistema.Venta.MappingUnidad.ConsultarUnidadePorClave(oInsumo.UnidadDeMedida.IdUnidadMedida);                 
                }

                return oInsumo;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
    }
}
